package co.gov.medellin.sdep.sisdep.common;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * <p>
 * Clase de ayuda para la transformacion entre tipos persistidos y tipos java.
 * </p>
 * <p>
 * Copyright (c) 2011<BR>
 * Consult-Soft S.A.<BR>
 * Created on: Dec 16, 2011<BR>
 * 
 * @author atabares
 *         </p>
 */
public final class OracleHelper {

	private static SimpleDateFormat dateFormat = new SimpleDateFormat(
			"dd/MM/yyyy");

	// private static SimpleDateFormat timeStmpFormat = new
	// SimpleDateFormat("YYYY-MM-DD HH24:MI:SS.FF");

	/**
	 * private constructor
	 */
	private OracleHelper() {
	}

	/**
	 * Convierte un valor booleano a un String('Y' or 'N').
	 * 
	 * @param booleanValue
	 *            con valores true o false.
	 * @return S o N.
	 */
	public static String boolean2string(boolean booleanValue) {
		if (booleanValue) {
			return "S";
		} else {
			return "N";
		}
	}

	/**
	 * Convierte un valor Date a un valor tipo String con formato
	 * fecha(DD/MM/YYYY).
	 * 
	 * @param dateValue
	 *            objeto tipo Date.
	 * @return String con formato fecha(DD/MM/YYYY).
	 */
	public static String date2string(Date dateValue) {
		if (dateValue != null) {
			return dateFormat.format(dateValue);
		}
		
		return null;
	}

	/**
	 * Compara si un string esta vacio o es null y devuelve su valor booleano.
	 * Retornara true si el string cumple alguna de las 2 condiciones.
	 * 
	 * @param str
	 *            String para evaluar
	 * @return Condicion booleana despues de la comparacion
	 */
	public static boolean isNullorEmpty(String str) {
		return ((str == null) || (str.length() == 0));
	}

	/**
	 * Convierte un valor almacenado como un String('Y' or 'N') a un valor
	 * boolean.
	 * 
	 * @param stringValue
	 *            con valores S o N.
	 * @return true o false.
	 */
	public static boolean string2boolean(String stringValue) {
		return stringValue.equals("S");
	}

	/**
	 * Convierte un valor String con formato fecha(DD/MM/YYYY) a un valor tipo
	 * Date.
	 * 
	 * @param stringValue
	 *            con formato fecha(DD/MM/YYYY).
	 * @return Date.
	 * @throws ParseException
	 */
	public static Date string2date(String stringValue) throws ParseException {
		Date dateConverted = null;
		dateConverted = dateFormat.parse(stringValue.replaceAll("-", "/"));
		return dateConverted;
	}

	/**
	 * Convierte un valor String con formato fecha(DD/MM/YYYY) a un valor tipo
	 * Timestamp.
	 * 
	 * @param stringValue
	 *            con formato fecha(DD/MM/YYYY).
	 * @return Timestamp(Formato dependiente del NLS_TIMESTAMP_FORMAT de la
	 *         instancia Oracle).
	 * @throws ParseException
	 */
	public static Timestamp string2timeStamp(String stringValue)
			throws ParseException {
		Timestamp timeStmpConverted = null;
		Date dateConverted = new Date();
		dateConverted = dateFormat.parse(stringValue.replaceAll("-", "/"));
		timeStmpConverted = new Timestamp(dateConverted.getTime());
		return timeStmpConverted;
	}

	/**
	 * Convierte un valor Timestamp a un valor tipo String con formato
	 * fecha(DD/MM/YYYY).
	 * 
	 * @param timeStmpValue
	 *            objeto tipo Timestamp.
	 * @return String con formato fecha(DD/MM/YYYY).
	 */
	public static String timeStamp2string(Timestamp timeStmpValue) {
		if (timeStmpValue != null) {
			Date dateValue = new Date(timeStmpValue.getTime());
			return dateFormat.format(dateValue);
		}

		return null;
	}

}
